/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.entities;

import com.PiketPegawai.TypeEntry;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComboBox;

/**
 *
 * @author Ignacio
 */
public class Pegawai {

        private String nama;
    private String NIP;
    private String tempatLahir;
    private String tanggalLahir;
    private String jenisKelamin;
    private String pendidikan;
    private String tanggalKerja;
    private String tipePegawai;
    private String golongan;
    private long gajiPokok;
    private String jabatan;
    private String alamat;
    private int MKG;
    private Connection koneksi;
    private static Pegawai pegs;
    private static List<Pegawai> pegList;
    public Pegawai() {
    }

    public static Pegawai getKoneksiKontrol() throws SQLException, ClassNotFoundException {
        if (pegs == null) {
            pegs= new Pegawai(com.entities.Koneksi.Koneksi());
        }
        return pegs;
    }
    
    public Pegawai(Connection konek) {
        this.koneksi = konek;
    }

    /**
     * @return the nama
     */
    public String getNama() {
        return nama;
    }

    /**
     * @param nama the nama to set
     */
    public void setNama(String nama) {
        this.nama = nama;
    }

    /**
     * @return the NIP
     */
    public String getNIP() {
        return NIP;
    }

    /**
     * @param NIP the NIP to set
     */
    public void setNIP(String NIP) {
        this.NIP = NIP;
    }

    /**
     * @return the tempatLahir
     */
    public String getTempatLahir() {
        return tempatLahir;
    }

    /**
     * @param tempatLahir the tempatLahir to set
     */
    public void setTempatLahir(String tempatLahir) {
        this.tempatLahir = tempatLahir;
    }

    /**
     * @return the tanggalLahir
     */
    public String getTanggalLahir() {
        return tanggalLahir;
    }

    /**
     * @param tanggalLahir the tanggalLahir to set
     */
    public void setTanggalLahir(String tanggalLahir) {
        this.tanggalLahir = tanggalLahir;
    }

    /**
     * @return the jenisKelamin
     */
    public String getJenisKelamin() {
        return jenisKelamin;
    }

    /**
     * @param jenisKelamin the jenisKelamin to set
     */
    public void setJenisKelamin(String jenisKelamin) {
        this.jenisKelamin = jenisKelamin;
    }

    /**
     * @return the pendidikan
     */
    public String getPendidikan() {
        return pendidikan;
    }

    /**
     * @param pendidikan the pendidikan to set
     */
    public void setPendidikan(String pendidikan) {
        this.pendidikan = pendidikan;
    }

    /**
     * @return the tanggalKerja
     */
    public String getTanggalKerja() {
        return tanggalKerja;
    }

    /**
     * @param tanggalKerja the tanggalKerja to set
     */
    public void setTanggalKerja(String tanggalKerja) {
        this.tanggalKerja = tanggalKerja;
    }

    /**
     * @return the tipePegawai
     */
    public String getTipePegawai() {
        return tipePegawai;
    }

    /**
     * @param tipePegawai the tipePegawai to set
     */
    public void setTipePegawai(String tipePegawai) {
        this.tipePegawai = tipePegawai;
    }

    /**
     * @return the golongan
     */
    public String getGolongan() {
        return golongan;
    }

    /**
     * @param golongan the golongan to set
     */
    public void setGolongan(String golongan) {
        this.golongan = golongan;
    }

    /**
     * @return the gajiPokok
     */
    public long getGajiPokok() {
        return gajiPokok;
    }

    /**
     * @param gajiPokok the gajiPokok to set
     */
    public void setGajiPokok(long gajiPokok) {
        this.gajiPokok = gajiPokok;
    }

    /**
     * @return the jabatan
     */
    public String getJabatan() {
        return jabatan;
    }

    /**
     * @param jabatan the jabatan to set
     */
    public void setJabatan(String jabatan) {
        this.jabatan = jabatan;
    }

    public void simpanPegawai(Pegawai pegawai) throws SQLException {
        PreparedStatement prepare = null;
        koneksi.setAutoCommit(false);
        String sql1 = "insert into pegawai values (?,?,?,?,?,?,?,?,?,?,?,?)";
        prepare = koneksi.prepareStatement(sql1);
        prepare.setObject(1, pegawai.getNIP());
        prepare.setObject(2, pegawai.getNama());
        prepare.setObject(3, pegawai.getTempatLahir());
        prepare.setObject(4, pegawai.getTanggalLahir());
        prepare.setObject(5, pegawai.getJenisKelamin());
        prepare.setObject(6, pegawai.getPendidikan());
        prepare.setObject(7, pegawai.getJabatan());
        prepare.setObject(8, pegawai.getTanggalKerja());
        prepare.setObject(9, pegawai.getAlamat());
        prepare.setObject(10, pegawai.getGolongan());
        prepare.setObject(11, pegawai.getTipePegawai());
        prepare.setObject(12, pegawai.getMKG());
        prepare.executeUpdate();
        koneksi.commit();
    }
    
    public List<Pegawai> ambilPegawai() throws SQLException{
        PreparedStatement statement = null;
        ResultSet result = null;
        koneksi.setAutoCommit(false);
        String sql = "select a.NIP, a.nama,a.tempat_lahir, a.tanggal_lahir, "
                + "a.jenis_kelamin, a.pendidikan, a.tipe, a.id_golongan,"
                + " b.gaji_pokok from pegawai a, golongan b where a.id_golongan"
                + " = b.id_golongan and a.MKG = b.MKG";
        statement = koneksi.prepareStatement(sql);
        result = statement.executeQuery();
        List<Pegawai> pegawai1 = new ArrayList<Pegawai>();

        while (result.next()) {
            Pegawai pegawai = new Pegawai();
            String selectedNip = result.getString(1);
            String selectedNama = result.getString(2);
            String selectedTempatLahir = result.getString(3);
            String selectedTanggalLahir = result.getString(4);
            String selectedSJKelamin = result.getString(5);
            String selectedPendidikan = result.getString(6);
            String selectedTipe = result.getString(7);
            String selectedGol = result.getString(8);
            long selectedGajiPokok = result.getLong(9);
            pegawai.setNIP(selectedNip);
            pegawai.setNama(selectedNama);
            pegawai.setTempatLahir(selectedTempatLahir);
            pegawai.setTanggalLahir(selectedTanggalLahir);
            pegawai.setJenisKelamin(selectedSJKelamin);
            pegawai.setPendidikan(selectedPendidikan);
            pegawai.setTipePegawai(selectedTipe);
            pegawai.setGolongan(selectedGol);
            pegawai.setGajiPokok(selectedGajiPokok);
            pegawai1.add(pegawai);
        }
        koneksi.commit();
        return pegawai1;
    
    }
    
    public void deletePegawai(String nip) throws SQLException{
        PreparedStatement stat = null;
        String sql = "delete from pegawai where nip=(?)";
        stat = koneksi.prepareStatement(sql);
        stat.setString(1, nip);
        stat.execute();
        stat.close();
        koneksi.commit();
    }
    
    public List<Pegawai> selectPegawai(String nip) throws SQLException{
        PreparedStatement statement = null;
        ResultSet result = null;
        koneksi.setAutoCommit(false);
        String sql = "select nip, nama, tempat_lahir, tanggal_lahir, jenis_kelamin,"
                + " pendidikan, jabatan, tanggal_kerja, alamat, id_golongan, tipe, mkg "
                + "from pegawai where nip = (?)";
        statement = koneksi.prepareStatement(sql);
        statement.setObject(1, nip);
        result = statement.executeQuery();
        List<Pegawai> pegawai = new ArrayList<Pegawai>();
        while(result.next()){
            Pegawai select = new Pegawai();
            select.setNIP(result.getString("nip"));
            select.setNama(result.getString("nama"));
            select.setTempatLahir(result.getString("tempat_lahir"));
            select.setTanggalLahir(result.getString("tanggal_lahir"));
            select.setJenisKelamin(result.getString("jenis_kelamin"));
            select.setTanggalKerja(result.getString("tanggal_kerja"));
            select.setPendidikan(result.getString("pendidikan"));
            select.setTipePegawai(result.getString("tipe"));
            select.setJabatan(result.getString("jabatan"));
            select.setGolongan(result.getString("id_golongan"));
            select.setMKG(result.getInt("mkg"));
            select.setAlamat(result.getString("alamat"));
//            System.out.println(result.getString("nip"));
//            System.out.println(result.getString("tanggal_lahir"));
            pegawai.add(select);            
        }
        koneksi.commit();
        return pegawai;
    }

    public void updatePegawai (Pegawai updatePeg) throws SQLException{
        PreparedStatement prepare = null;
        koneksi.setAutoCommit(false);
        String sql1 = "update pegawai set nama= (?), tempat_lahir= (?), tanggal_lahir= (?), jenis_kelamin=(?),"
                + "pendidikan=(?), jabatan=(?), tanggal_kerja=(?), alamat=(?), id_golongan= (?), tipe= (?), MKG= (?)"
                + "where nip= (?)";
        prepare = koneksi.prepareStatement(sql1);
         
        prepare.setObject(1, updatePeg.getNama());
        prepare.setObject(2, updatePeg.getTempatLahir());
        prepare.setObject(3, updatePeg.getTanggalLahir());
        prepare.setObject(4, updatePeg.getJenisKelamin());
        prepare.setObject(5, updatePeg.getPendidikan());
        prepare.setObject(6, updatePeg.getJabatan());
        prepare.setObject(7, updatePeg.getTanggalKerja());
        prepare.setObject(8, updatePeg.getAlamat());
        prepare.setObject(9, updatePeg.getGolongan());
        prepare.setObject(10, updatePeg.getTipePegawai());
        prepare.setObject(11, updatePeg.getMKG());
        prepare.setObject(12, updatePeg.getNIP());
        prepare.executeUpdate();
        koneksi.commit();
    }
    public void entryPegawai()throws SQLException{
        TypeEntry type;
       
        PreparedStatement statement = null;
        ResultSet result = null;
        koneksi.setAutoCommit(false);
        result = statement.executeQuery("SELECT nama FROM pegawai ORDER BY nama");
        while (result.next()){
            Pegawai select = new Pegawai();
             JComboBox comboBox=new JComboBox();
//          comboBox.addItem(select.setNama(result.getString("nama")));
        }
       result.close(); 
    }


    /**
     * @return the alamat
     */
    public String getAlamat() {
        return alamat;
    }

    /**
     * @param alamat the alamat to set
     */
    public void setAlamat(String alamat) {
        this.alamat = alamat;
    }

    public int getMKG() {
        return MKG;
    }

    public void setMKG(int MKG) {
        this.MKG = MKG;
    }
    
    public static List<Pegawai> getPegs() {
        return pegList;
    }

    public static void setPegs(List<Pegawai> aPegs) {
        pegList = aPegs;
    }
}
